﻿namespace EFS.RC.CC.Sessions.OfficeService
{
	/// <summary>
	/// Customer session
	/// </summary>
	internal interface IParticipant : EFS.Common.ISelfDescriptor
	{
		/// <summary>
		/// Office service conference
		/// </summary>
		EFS.RC.CC.Confereces.OfficeService OfficeServiceConference { get; }

		/// <summary>
		/// Participant end point URI
		/// </summary>
		System.String ParticipantEndPointUri { get; }

		/// <summary>
		/// Established delegate
		/// </summary>
		EFS.Common.Async.AsyncDelegate<EFS.RC.CC.Sessions.OfficeService.IParticipant> AsinkEstablishedDelegate { get; }

		/// <summary>
		/// Terminate delagate
		/// </summary>
		EFS.Common.Async.AsyncDelegate<EFS.RC.CC.Sessions.OfficeService.IParticipant> AsinkTerminatedDelegate { get; }

		/// <summary>
		/// Get participant end point
		/// </summary>
		Microsoft.Rtc.Collaboration.ParticipantEndpoint ParticipantEndPoint { get; }

		/// <summary>
		/// Handle added end point in conference
		/// </summary>
		/// <param name="conversationParticipantEndPoint"></param>
		void HandleParticipantEndPointAdded(Microsoft.Rtc.Collaboration.ParticipantEndpoint participantEndPoint);

		/// <summary>
		/// Handle removed end point in conversation
		/// </summary>
		/// <param name="conversationParticipantEndPoint"></param>
		void HandleParticipantEndPointRemoved(Microsoft.Rtc.Collaboration.ParticipantEndpoint participantEndPoint);

		/// <summary>
		/// Begin startup
		/// </summary>
		EFS.Common.Async.AsyncProcess BeginStartup();

		/// <summary>
		/// Begin shutdows
		/// </summary>
		EFS.Common.Async.AsyncProcess BeginShutdown();
	}
}
